import LAYOUT from '../views/Layout'
import {notification} from 'ant-design-vue';

export default {


    ajaxMessage(res) {
        let message, type;
        if (res.code === 0) {
            type = "success";
            message = "操作成功"
        } else {
            type = "error";
            message = "操作失败";
        }
        notification[type]({
            message: message,
            description: res.message,
            duration:2.5
        });
    },

    _import: function (file) {
        return () => import('@/views/' + file )
    },

    //判断字符是否为空的方法
    isEmptyString: function (obj) {
        return typeof obj === undefined || obj === null || obj === "" ;
    },
      //判断一个对象是否为空
    isEmptyObject:function (obj){
      return   Object.keys(obj).length ===0;
        },

    //重新计算菜单注册

    formatMenData: function (data) {
        const result = [];
        for (let i = 0; i < data.length; i++) {
            let mx = {};
            mx.path = data[i].path;
            mx.title = data[i].name;
            mx.icon = data[i].icon;
            if (data[i].children && data[i].children.length > 0) {
                mx.component = LAYOUT;
                mx.children = this.formatMenData(data[i].children)
            } else {
                mx.component = this._import(data[i].component)
            }

            result.push(mx);
        }


        return result;


    },


    //时间戳转换为时间
    formatDate: function (timestamp, format) {
        var a, jsdate = ((timestamp) ? new Date(timestamp * 1000) : new Date());
        var pad = function (n, c) {
            if ((n = n + "").length < c) {
                return new Array(++c - n.length).join("0") + n;
            } else {
                return n;
            }
        };
        var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
        var txt_ordin = {
            1: "st",
            2: "nd",
            3: "rd",
            21: "st",
            22: "nd",
            23: "rd",
            31: "st"
        };
        var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September",
            "October", "November", "December"
        ];
        var f = {
            // Day
            d: function () {
                return pad(f.j(), 2)
            },
            D: function () {
                return f.l().substr(0, 3)
            },
            j: function () {
                return jsdate.getDate()
            },
            l: function () {
                return txt_weekdays[f.w()]
            },
            N: function () {
                return f.w() + 1
            },
            S: function () {
                return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
            },
            w: function () {
                return jsdate.getDay()
            },
            z: function () {
                return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0
            },
            // Week
            W: function () {
                var a = f.z(),
                    b = 364 + f.L() - a;
                var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;
                if (b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
                    return 1;
                } else {
                    if (a <= 2 && nd >= 4 && a >= (6 - nd)) {
                        nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
                        return date("W", Math.round(nd2.getTime() / 1000));
                    } else {
                        return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
                    }
                }
            },
            // Month
            F: function () {
                return txt_months[f.n()]
            },
            m: function () {
                return pad(f.n(), 2)
            },
            M: function () {
                return f.F().substr(0, 3)
            },
            n: function () {
                return jsdate.getMonth() + 1
            },
            t: function () {
                var n;
                if ((n = jsdate.getMonth() + 1) == 2) {
                    return 28 + f.L();
                } else {
                    if (n & 1 && n < 8 || !(n & 1) && n > 7) {
                        return 31;
                    } else {
                        return 30;
                    }
                }
            },
            // Year
            L: function () {
                var y = f.Y();
                return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
            },
            //o not supported yet
            Y: function () {
                return jsdate.getFullYear()
            },
            y: function () {
                return (jsdate.getFullYear() + "").slice(2)
            },
            // Time
            a: function () {
                return jsdate.getHours() > 11 ? "pm" : "am"
            },
            A: function () {
                return f.a().toUpperCase()
            },
            B: function () {

                var off = (jsdate.getTimezoneOffset() + 60) * 60;
                var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
                var beat = Math.floor(theSeconds / 86.4);
                if (beat > 1000) beat -= 1000;
                if (beat < 0) beat += 1000;
                if ((String(beat)).length == 1) beat = "00" + beat;
                if ((String(beat)).length == 2) beat = "0" + beat;
                return beat;
            },
            g: function () {
                return jsdate.getHours() % 12 || 12
            },
            G: function () {
                return jsdate.getHours()
            },
            h: function () {
                return pad(f.g(), 2)
            },
            H: function () {
                return pad(jsdate.getHours(), 2)
            },
            i: function () {
                return pad(jsdate.getMinutes(), 2)
            },
            s: function () {
                return pad(jsdate.getSeconds(), 2)
            },

            O: function () {
                var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
                if (jsdate.getTimezoneOffset() > 0) t = "-" + t;
                else t = "+" + t;
                return t;
            },
            P: function () {
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2))
            },

            c: function () {
                return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()
            },

            U: function () {
                return Math.round(jsdate.getTime() / 1000)
            }
        };
        return format.replace(/[\\]?([a-zA-Z])/g, function (t, s) {
            let ret;
            if (t != s) {
                // escaped
                ret = s;
            } else if (f[s]) {
                // a date function exists
                ret = f[s]();
            } else {
                // nothing special
                ret = s;
            }
            return ret;
        });
    },
    //表格数据验证  key 表格键主键，fields 验证字段名称, 参数为数组,callback 回调
    validateRow: function (key, fields, callback) {
        // 查找验证是否通过
        const row = {};
        let err = false;
        // forEach 对每一个验证，可以更改为some满足一个就提醒
        fields.forEach(filed => {
            let refName = `${filed}_${key}`;
            let result = this.$refs[refName].validate();
            row[filed] = result.value;
            if (!result.success) {
                err = true;
            }
        });
        callback(err, row);
    },
    //过滤对象空值
    filterObjEmpty: function (obj) {
        for (var key in obj) {
            if (obj.hasOwnProperty(key) && (obj[key] == null || obj[key] == undefined || obj[key] === " " || obj[key] === "")) {
                //删除没有的属性和空的
                delete obj[key];
            }
        }
        return obj;
    },

    //根据字典值返回字典名称
    findDict: function (dictArr, searchVal) {
        //使用 == 不校验数据格式 因为有可能是字符串
        let dict = dictArr.find((element) => (element.value === String( searchVal)  ));
        if (dict === undefined) {
            return '#NA';
        } else {
            return dict.label;

        }

    },

    //深拷贝对象
    deepCopy: function (obj) {
        // 根据obj的类型判断是新建一个数组还是一个对象
        let newObj = obj instanceof Array ? [] : {};
        for (let key in obj) {
            // 判断属性值的类型，如果是对象递归调用深拷贝
            newObj[key] = typeof obj[key] === 'object' ? this.deepCopy(obj[key]) : obj[key];
        }
        return newObj;
    },

    //判断当前环境是否是IE浏览器
    isIE: function () {
        return !!window.ActiveXObject || "ActiveXObject" in window;
    },

    //播放器背景图
    playerBg: function () {
        return '';
    },

    //生成执行长度的随机字符串
    randString: function (n) {
        let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        str += 'abcdefghijklmnopqrstuvwxyz';
        str += '0123456789';

        let tmp = '',
            i = 0,
            l = str.length;
        for (i = 0; i < n; i++) {
            tmp += str.charAt(Math.floor(Math.random() * l));
        }
        return tmp;
    }
    ,

    //select 内容搜索方法
    cxOption(input, option) {
        return (
            option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
        );
    },

}
